package com.dmjj.cadcommon.base;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;

import java.io.Serializable;
import java.util.List;

/**
 * Description: 抽象服务类 
 * Project: meirenhui 
 * ClassName: AbstractService 
 * Copyright: Copyright (c) 2017 deshang
 * @author bushy
 * @version 1.0 2017年10月20日上午7:07:28
 * @param <T>
 */
public abstract class BaseServiceImpl<T, PK extends Serializable> implements BaseService<T, PK> {

	/**
	 * 具体Mapper
	 * @author bushy
	 * @createDate 2017年10月20日上午11:42:20
	 */
	protected abstract BaseMapper<T, PK> getMapper();

	/**
	 * @author bushy
	 * @createDate 2017年10月20日上午7:11:24
	 * @param entity
	 * @return
	 */
	@Override
	public PK save(T entity) {
		Long id = null;
		try {
			id = (Long)entity.getClass().getMethod("getId").invoke(entity);
		}catch(Exception e) {
			
		}
		if(id!=null && id > 0) {
			return getMapper().edit(entity);
		}else {
			return getMapper().add(entity);
		}
	}
	
	/**
	 * @author bushy
	 * @createDate 2017年10月20日上午7:44:36
	 * @param entity
	 * @return
	 */
	@Override
	public List<T> listByCondition(T entity) {
		return getMapper().listByCondition(entity);
	}
	
	/**
	 * @author bushy
	 * @createDate 2017年10月20日上午7:46:15
	 * @param entity
	 * @param pageNum
	 * @return
	 */
	@Override
	public List<T> list4Page(T entity, Integer pageNum, Integer... pageSize) {
		Integer curPageSize = 0;
		for (Integer ps : pageSize) {
			curPageSize = ps;
		}
//		PageHelper.startPage(pageNum, curPageSize != null && curPageSize > 0 ? curPageSize : Pagination.PAGE_SIZE.getVal());
		PageHelper.startPage(pageNum, curPageSize != null && curPageSize > 0 ? curPageSize : 10);
		return getMapper().list4Page(entity);
	}

	/**
	 * @Description: 查询记录带分页
	 * @return
	 * @author 王丽凯
	 * @date 2018/12/25
	 */
	@Override
	public List list4PageNew(T entity, Integer pageNum, Integer... pageSize){
		Integer curPageSize = 0;
		for (Integer ps : pageSize) {
			curPageSize = ps;
		}
		Page page = PageHelper.startPage(pageNum, curPageSize != null && curPageSize > 0 ? curPageSize : 10);
		List list = getMapper().list4Page(entity);
//		list.add(page.getPages());
		list.add(Integer.valueOf(String.valueOf(page.getTotal())));
		return list;
	}
	
	/**
	 * @author bushy
	 * @createDate 2017年10月20日上午7:49:13
	 * @param id
	 * @return
	 */
	@Override
	public T queryOneByPk(PK id) {
		return getMapper().queryOneByPk(id);
	}
	
	/**
	 * @author bushy
	 * @createDate 2017年10月20日上午7:50:17
	 * @param id
	 * @return
	 */
	@Override
	public Integer delete(PK id) {
		if (id!=null&&id!=""){
			return getMapper().delete(id);
		}else {
			return null;
		}
	}

	/**
	 * @Description: 编辑信息
	 * @param
	 * @return
	 * @author 王丽凯
	 * @date 2018/12/27
	 */
	@Override
	public PK edit(T entity){
		return getMapper().edit(entity);
	}

}
